package test01;

import java.lang.reflect.Method;
import java.util.stream.Stream;

/**
 * @Author czl
 * @Date 2024-04-15
 */
public class MainTest02 {
    public static void main(String[] args) throws Exception {

        // 第一：获取操作类的 Class 对象
        // 第二：调用相关 API 方法，实现相关的操作
        // 1.获取类中定义的所有方法 - 数组 - Stream
        // 2.基于数组，实例化 Stream 对象
        // 3.过滤具有 Order 注解的方法
        // 4.获取  Order 注解的值，并对其进行排序（升序）
        // 1）获取注解的值
        // 2）判断返回
        // 5.映射操作 - 把 Method 对象转换为方法名称的字符串
        // 6.循环遍历输出

        Stream.of(UserService.class.getDeclaredMethods())
                .filter(m -> m.isAnnotationPresent(Order.class))
                .sorted((m1, m2) -> m1.getAnnotation(Order.class).value() - m2.getAnnotation(Order.class).value())
                .map(Method::getName)
                .forEach(System.out::println);
    }
}
